From bb3a8edb9f21e486f1972c72c4a4090af790e7d7 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 22 Aug 2014 19:15:57 +0200 Subject: [PATCH] scalebutton: Handle smooth scroll events This has the double effect to make scale button truly smooth, and make scrolling work on wayland, since all scrolling is "smooth" there. https://bugzilla.gnome.org/show_bug.cgi?id=720269 --- gtk/gtkscalebutton.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c index c979f613f1..24976b0acc 100644 --- a/gtk/gtkscalebutton.c +++ b/gtk/gtkscalebutton.c @@ -357,7 +357,7 @@ gtk_scale_button_init (GtkScaleButton *button) /* Need a local reference to the adjustment */ g_object_ref (priv->adjustment); - gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK); + gtk_widget_add_events (GTK_WIDGET (button), GDK_SMOOTH_SCROLL_MASK); } static void @@ -786,12 +786,18 @@ gtk_scale_button_scroll (GtkWidget *widget, if (d > gtk_adjustment_get_upper (adjustment)) d = gtk_adjustment_get_upper (adjustment); } - else + else if (event->direction == GDK_SCROLL_DOWN) { d -= gtk_adjustment_get_step_increment (adjustment); if (d < gtk_adjustment_get_lower (adjustment)) d = gtk_adjustment_get_lower (adjustment); } + else if (event->direction == GDK_SCROLL_SMOOTH) + { + d += event->delta_y * gtk_adjustment_get_step_increment (adjustment); + d = CLAMP (d, gtk_adjustment_get_lower (adjustment), + gtk_adjustment_get_upper (adjustment)); + } gtk_scale_button_set_value (button, d); return TRUE; -- 2.30.2